新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2017-10-23
- 在线时间
- 2 小时
|
1金钱
我同TIM8来驱动步进电机正反装,用TIM1来控制舵机旋转,通过串口想单片机发送指令,来控制步进电机的旋转角度。在没加入舵机旋转转时,步进电机一切正常,正反装都可以用。加入舵机旋转时,步进电机就只能向一个方向转了,知道的告诉我一声。下面的代码是不舵机部分注释掉的代码,全部的文件在附件里面。
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
#include "usmart.h"
#include "driver.h"
#include "pwm.h"
//ALIENTEK Mini STM32¿a·¢°å
//2½½øμç»úÇy¶ˉÆ÷ 2aêÔ′úÂë
//¼¼êõÖ§3Ö£owww.openedv.com
//1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾
int main(void)
{
int t;
int wz=0;
int dir;
u8 i;
u8 keyval;
NVIC_Configuration();
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
uart_init(9600); //′®¿ú3õê¼»ˉÎa115200
usmart_dev.init(72); //3õê¼»ˉUSMART
LED_Init(); //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
KEY_Init(); //3õê¼»ˉ°′¼ü
Driver_Init(); //Çy¶ˉÆ÷3õê¼»ˉ
TIM8_OPM_RCR_Init(999,72-1); //1MHz¼ÆêyÆμÂê μ¥Âö3å+ÖØ¸′¼ÆêyÄ£ê½
TIM1_PWM_Init(199,7199);//(7200*200)/72000000=0.02=20ms
while(1)
{
if(USART_RX_STA&0x8000)
{
t=USART_RX_BUF[0]-'0';
//t=(USART1->DR-'0');
if(t-wz>0)
{
dir=CCW;
}
else
dir=CW;
if((t-wz)!=0)
{
switch (abs(t-wz))
{
case 1:
{
Locate_Rle(800,500,dir);
delay_ms(1600);
break;
}
case 2:
{
Locate_Rle(1600,500,dir);
delay_ms(3200);
break;
}
case 3:
{
Locate_Rle(2400,500,dir);
delay_ms(4800);
break;
}
}
}
wz=t;
USART_RX_STA=0;
// delay_ms(5000);
// delay_ms(5000);
// delay_ms(5000);
// for(i=0;i<2;i++)
// {
// TIM_SetCompare1(TIM1,177); //2ms
// delay_ms(5000); //»ù×ùDy×a2»¿éòÔμ½μ×2¿£¬ËùòÔ2»Ñ¡×Å175¶øÑ¡Ôñ177
// TIM_SetCompare1(TIM1,185); //1.5ms
// delay_ms(5000); /*×ù»úμÄDy×a£¬ÏèDy×aoó»Ö¸′*/
// }
}
keyval=KEY_Scan(0);
if(keyval==WKUP_PRES)
{
Locate_Abs(0,500);//°′ÏÂWKUP£¬»Øáãμã
}else if(keyval==KEY0_PRES)
{
Locate_Rle(800,500,CW);//°′ÏÂKEY0£¬òÔ500HzμÄÆμÂê Ë3ê±Õë·¢200Âö3å
}else if(keyval==KEY1_PRES)
{
Locate_Rle(800,500,CCW);//°′ÏÂKEY1£¬òÔ500HzμÄÆμÂê Äæê±Õë·¢400Âö3å
}
}
}
|
|