使用stm32f103rct6测量电机的正反转和速度,可以进行pid控制速度
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "timer.h"
- #include "usart.h"
- uint16_t Qian_Count,Hou_Count;
- uint8_t flag;
- float speed;
- char str[100];
-
- int main(void)
- {
- //NVIC_Config();
- TIM3_Init( 0xffff-1, 0x00);
- TIM2_Init(999 , 7199);
-
- //TIM_Init();
- delay_init(); //延时函数初始化
- uart_init(9600); //串口初始化波特率为9600
- LED_Init(); //初始化与LED连接的硬件接口
- while(1)
- {
- sprintf(str,"speed :%.3f\r\n",speed);
- printf(str);
- delay_ms(100);
- }
- }
- void TIM3_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET)
- {
- TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除标志位
- flag++;
- }
- }
- //定时器2的中断函数
- void TIM2_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
- {
- TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除标志位
-
- Qian_Count = TIM3->CNT;
- speed=(10*(flag*0xffff+Qian_Count-Hou_Count)/4)/210;
- flag = 0;
- Hou_Count=Qian_Count;
- }
- }
复制代码
那么问题来了,如何加入pid:
编码器.7z
(191.15 KB, 下载次数: 61)
|