|
楼主 |
发表于 2015-2-28 00:09:53
|
显示全部楼层
- /*
- 纯串口控制
- 加入脱机控制
- */
-
-
- //电机的高电平持续时间 us
- int maichongjiangeMax=357;
- int maichongjiangeMin=120;
-
- //电机的高电平持续时间的初始值 120us
- int maichongjiange=357;
- // EN+,脱机,高电平有效
- // CW+,方向
- // CLK+,频率(转速)
- int EN=10;
- int CW=11;
- int CLK=12;
-
- //脉冲的占空比为1/maichongzhankongbi
- int maichongzhankongbi=4;
-
- ////////////////////////////////////////////
-
- int tempint;
- int maichongjsq=0;//脉冲计数器
-
- unsigned long time2=micros();
-
-
- void setup(){
-
- Serial.begin(9600);
-
- pinMode(EN, OUTPUT);// EN+,脱机,高电平有效
- pinMode(CW, OUTPUT);// CW+,方向
- pinMode(CLK, OUTPUT);// CLK+,频率(转速)
-
- digitalWrite(EN, HIGH);//电机默认脱机
- digitalWrite(CW, LOW);//
- digitalWrite(CLK, LOW);
- for(int col=2;col<10;col++)pinMode(col, INPUT_PULLUP);
-
- }
-
-
- void loop(){
-
-
-
-
- while (Serial.available() > 0) {
-
- //丧心病狂的单字节控制,0延迟,纯ASCII分拆
- //定义1 0-9表示转速,每一个表示10%
- //定义2 A正转、B反转
- //定义3 C联机、D脱机
-
- tempint=Serial.read();
-
- //调速度
- if(tempint>47 && tempint< 58) maichongjiange = 625/(1.75+3.25*(tempint-48)/10);//0-1023
- //调方向
- else if(tempint==65)digitalWrite(CW, 0);
- else if(tempint==66)digitalWrite(CW, 1);
- //脱机
- else if(tempint==67)digitalWrite(EN, 0);
- else if(tempint==68)digitalWrite(EN, 1);
-
- //E jiansu F jiasu
- else if(tempint==69){
- maichongjiange=maichongjiange+3;
- if(maichongjiange>maichongjiangeMax)maichongjiange=maichongjiangeMax;
- }
- else if(tempint==70){
- maichongjiange=maichongjiange-3;
- if(maichongjiange<maichongjiangeMin)maichongjiange=maichongjiangeMin;
- }
-
- Serial.println(maichongjiange);
- tempint=0;
-
- }
-
-
-
- for(int col=10;col>1;col--){
- tempint= digitalRead(col);
- if(tempint==LOW){
- Serial.print("Max:");
- Serial.println(col);
- col=0;
-
- }
-
- }
-
- //在脉冲频率无变化的时候驱动电机正常运行
- maichongqudong();
-
-
- }
-
-
- void maichongqudong()//脉冲驱动
- {
-
- //步进电机控制脉冲
- if (micros()-time2 > maichongjiange){
-
- maichongjsq++;//每过一个“脉冲间隔”时间段,则“脉冲计数器”自增1
- maichongjsq=maichongjsq%maichongzhankongbi;//对“脉冲计数器”取模,这个取摸结果实质就是对占空比的调节(占空比为1/模),以4为例,则“脉冲计数器”的变化为:0——1——2——3——0
-
- if(maichongjsq==0)digitalWrite(CLK, HIGH);//输出控制步进电机的电平
- else digitalWrite(CLK, LOW);
-
- time2= micros();
- }
-
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|