參考原子哥的原碼,試出使用TIM2 CH1 去輸出PWM控制步進電機的CLK
在使用TIM4去計數要走的步數,因我要使用ADC讀數據出來轉換成要走的步數.
以下是我的原碼拿出來跟大家討論,有更好的方式也可以提出跟大家分享。
#define pulse 999
#define pscr 71
int main(void)
{
u16 adcx=0;
float temp_now=0;
int buf=0,temp_old=0;
u8 flag=0;
SystemInit();
delay_init(72);
NVIC_Configuration();
uart_init(9600);
Stepper_PinControlConfig();
Adc_Init();
IIC_Init();
AT24CXX_Check();
SMCLK_Init(pulse,pscr);
Timerx_Init(pulse/2,pscr);
while(1)
{
adcx=Get_RinData(ADC_Channel_1);
temp_now=(float)adcx*(3.303/4096);
adcx=temp_now;
temp_now=(temp_now*265/33)+8;
if(temp_now<8) temp_now=8;
if(temp_now>26.5) temp_now=26.5;
buf=temp_now*100;
delay_ms(100);
if(10<(buf-temp_old)||10<(temp_old-buf))
{
temp_old=temp_now*100;
printf("%3.1fmm",temp_now);
flag=1;
}
if(flag==1)
{
TIM_Cmd(TIM4, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
buf=temp_now*10;
buf=buf*40;
Stepper_SetRotationDirection(SRD_CW);
while(buf!=StepCount);
printf("CW Step=%d\n",StepCount);
StepCount=0;
TIM_Cmd(TIM4, DISABLE);
TIM_Cmd(TIM2, DISABLE);
printf("motor CW stop\n");
delay_ms(2000);
if(flag==1)
{
TIM_Cmd(TIM4, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
buf=temp_now*10;
buf=buf*40;
Stepper_SetRotationDirection(SRD_CCW);
while(buf!=StepCount);
printf("CCW Step=%d\n",StepCount);
StepCount=0;
TIM_Cmd(TIM4, DISABLE);
TIM_Cmd(TIM2, DISABLE);
printf("motor CCW stop\n");
delay_ms(2000);
flag=0;
}
配置請參考原子哥的Mini原碼.
|