|
基于STM32的雙電機(jī)團(tuán)環(huán)跟隨控制,使用500線編碼器
單片機(jī)源程序如下:- #include "main.h"
- #include "pwm.h"
- #include "SDS.h"
- #include "DataScope_DP.h"
- u32 SET_SPEED=300;
- u8 Key=0;
- Pid_struct Main_pid_parameter,Slave_pid_parameter;
- int main(void)
- {
- unsigned char i; //計(jì)數(shù)變量
- unsigned char Send_Count; //串口需要發(fā)送的數(shù)據(jù)個(gè)數(shù)
-
- /********中斷優(yōu)先級(jí)設(shè)置********/
- Rcc_init();
- NVIC_Config();
-
- delay_init();
- PWM_Init(3999,0); //0分頻。PWM頻率=72000/(4000*1)=14Khz
-
- USART1_Config();
- KEY_Init();
-
- TIM1_init();
- TIM2_init(); // TIM1/2 編碼器
-
- TIM4_Init(4999,71); // 5ms 編碼器計(jì)時(shí)
-
- Speed_PIDInit(&Main_pid_parameter); //PID初始化
- Speed_PIDInit(&Slave_pid_parameter);
-
- while(1){
-
- // Send_Count = DataScope_Data_Generate(3); //生成10個(gè)通道的 格式化幀數(shù)據(jù),返回幀數(shù)據(jù)長(zhǎng)度
- // for( i = 0 ; i < Send_Count; i++) //循環(huán)發(fā)送,直到發(fā)送完畢
- // {
- // while((USART1->SR&0X40)==0);
- // USART1->DR = DataScope_OutPut_Buffer[i]; //從串口丟一個(gè)字節(jié)數(shù)據(jù)出去
- // }
- //
- // delay_ms(5); //20fps, 幀間隔時(shí)間。 不同電腦配置及 USB-TTL 設(shè)備的優(yōu)劣均會(huì)影響此時(shí)間的長(zhǎng)短,建議實(shí)測(cè)為準(zhǔn)。
-
- } }
- void NVIC_Config(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure; //復(fù)位NVIC寄存器為默認(rèn)值
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置中斷優(yōu)先級(jí)組
-
-
- NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; // 10ms 中斷
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
復(fù)制代碼
原理圖: 無(wú)
仿真: 無(wú)
代碼:
Double_motor_STM32.7z
(298.44 KB, 下載次數(shù): 12)
2023-11-22 19:17 上傳
點(diǎn)擊文件名下載附件
|
|