版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文案1. 检测霍尔传感器的值可以判断出转子的位置,再使能相应的上下桥臂, 则能驱动电机运动;若要让电机持续转动, 则必须再次检测传感器值及使能相应的上下桥臂。这里采用的是将霍尔传感器输出的三根线相边的IO 口配置成外部中断,并且为边沿触发,在中断函数中加入传感器检测与上下桥臂切换程序,如此电机就能持续运转了。2. 上桥臂的控制采用 IO 口置高低电平来控制上桥臂的通断,下桥臂则使用单片机内部集成的三路 PWM波来控制,通过控制 PWM波的占空比, 可以实现对电机的调速了。实际测得,占空比与电机的速度成正比例关系, 在 PWM波频率为 20KHz时,占空比增加 1%,速度增加 60rpm
2、,并在占空比为 53%时达到额定转速 3000rpm(空载)。3. 速度测量则采用如下公式:电机每转一圈, 霍尔值改变 6 次 x5 个周期 =30 次,记录边沿触发的中断次数 N/30= 电机转 过的圈数 , 设运转时间为 t(s) 则电机转速 v=N/30/t*60 rpm。即动转时间为 2s 时,霍尔值改变次数即为速度值,单位 rpm。4. 调速:给定速度, 由电机驱动板自动由当前速度平滑过渡到给定速度。实际测试发现,速度变化量很大时,电机会有突然加速或减速时的冲击;因此,调速应有一个缓冲的过程。即加速或减速应以小步进缓慢增加或减少占空比来让速度渐渐达到最终值。#include stm3
3、2f10x.h#include driver_motor.h#define PWM_PERIOD_T 400#define U_Up_On GPIOB-BSRR = GPIO_Pin_13#define U_Up_Off GPIOB-BRR = GPIO_Pin_13#define U_Dn_On GPIOA-BSRR = GPIO_Pin_8#define U_Dn_Off GPIOA-BRR = GPIO_Pin_8#define V_Up_On GPIOB-BSRR = GPIO_Pin_14#define V_Up_Off GPIOB-BRR = GPIO_Pin_14#define
4、V_Dn_On GPIOA-BSRR = GPIO_Pin_9#define V_Dn_Off GPIOA-BRR = GPIO_Pin_9#define W_Up_On GPIOB-BSRR = GPIO_Pin_15#define W_Up_Off GPIOB-BRR = GPIO_Pin_15#define W_Dn_On GPIOA-BSRR = GPIO_Pin_10#define W_Dn_Off GPIOA-BRR = GPIO_Pin_10#define SU_HOR GPIOA-IDR & GPIO_Pin_15#define SV_HOR GPIOA-IDR & GPIO_
5、Pin_12#define SW_HOR GPIOA-IDR & GPIO_Pin_11/u8 Motor_Dir=0;/u8 Motor_EN=0;精彩文档实用标准文案/u8 Hor_Value=7;/u16 TIM2_Conter=0;u16 Hall_Conter=0;MotorStruct Motor=CLOCK,40,STOP;/* * 函数: void IO_Init(void)* 描述: IO* 参数:* 返回:* 其它:*/void IO_Init(void)GPIO_InitTypeDef GPIO_InitStruct;EXTI_InitTypeDef EXTI_InitS
6、tructure;/GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); /* 使能 SWD 禁用 JTAG*/*LED Light*/GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;GPIO_Init(GPIOB, &GPIO_InitStruct);/*霍尔传感器中断*/GPIO_InitStruct.GPIO_Pin=GPIO_Pin
7、_11|GPIO_Pin_12|GPIO_Pin_15; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);/HarlGPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12);GPIO_EXTILineConfig
8、(GPIO_PortSourceGPIOA, GPIO_PinSource15);EXTI_InitStructure.EXTI_Line = EXTI_Line11 | EXTI_Line12|EXTI_Line15;精彩文档实用标准文案EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStruct
9、ure);/*函数: void PWM_Init(void)描述:配置PWM定时器 TIM1参数:返回:无*/void PWM_Init(void)GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_OCInitTypeDef TIM_OCInitStructure;/TIM_BDTRInitTypeDef TIM_BDTRInitStructure;TIM_Cmd(TIM1 , DISABLE);TIM_CtrlPWMOutputs(TIM1, DISABLE);/禁止
10、OC输出/IO口设置GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10); /PWM口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOB, GPI
11、O_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);/普通 IO 口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);/ 定时器设置TIM_TimeBaseInitStruct.TIM_Period= PWM_
12、PERIOD_T;/5极电机,3000RPM,每个 Step有 10 个脉冲,载波 15KHZTIM_TimeBaseInitStruct.TIM_Prescaler = 2;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1 , &TIM_TimeBaseInitStruct
13、);/TIM_ClearITPendingBit(TIM1, TIM_IT_Update);/TIM_ARRPreloadConfig(TIM1, ENABLE);/TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);精彩文档实用标准文案/ 配置 PWM输出TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_Ou
14、tputNState_Disable;TIM_OCInitStructure.TIM_Pulse = 1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;TIM_OC1Init(TIM
15、1, &TIM_OCInitStructure);TIM_OC2Init(TIM1, &TIM_OCInitStructure);TIM_OC3Init(TIM1, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM1, ENABLE);/上的预装载寄存器TIM_
16、Cmd(TIM1 , ENABLE);TIM_Cmd(TIM1 , ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE);/*函数: void Motor_Init(void)描述:参数:返回:*/void Motor_Init(void)IO_Init();PWM_Init();/*函数: void Flash_Led(u8 n)描述:参数:返回:* */使能 TIMx 在 ARR精彩文档实用标准文案void Flash_Led(u8 n)u8 i=0;for(i=0;iCCR1=pulse;break;case 2 :TIM1-CCR2=pulse;break;
17、case 3 :TIM1-CCR3=pulse;break;default :break;/*函数: PWM_T_Output描述:设置相应的PWM梯形波输出参数: pName上桥臂名称,nName下桥臂名称返回:无*精彩文档实用标准文案*/void PWM_T_Output(u8 pName , u8 nName , u8 mRate)switch(pName)case 1:GPIO_SetBits(GPIOB, GPIO_Pin_15 | GPIO_Pin_14 );GPIO_ResetBits(GPIOB , GPIO_Pin_13);break;case 2:GPIO_SetBits(
18、GPIOB, GPIO_Pin_13 | GPIO_Pin_15 );GPIO_ResetBits(GPIOB , GPIO_Pin_14);break;case 3:GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 );GPIO_ResetBits(GPIOB , GPIO_Pin_15);break;default:GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);switch(nName)case 1:TIM_SetCompare2(TIM1,0);TIM_SetCompar
19、e3(TIM1,0);TIM_SetCompare1(TIM1,(u16)(PWM_PERIOD_T * mRate / 100); break;case 2:TIM_SetCompare3(TIM1,0);TIM_SetCompare1(TIM1,0);TIM_SetCompare2(TIM1,(u16)(PWM_PERIOD_T * mRate / 100); break;case 3:TIM_SetCompare2(TIM1,0);TIM_SetCompare1(TIM1,0);TIM_SetCompare3(TIM1,(u16)(PWM_PERIOD_T * mRate / 100);
20、 break;default:TIM_SetCompare1(TIM1,0);TIM_SetCompare2(TIM1,0);TIM_SetCompare3(TIM1,0);精彩文档实用标准文案TIM_SetAutoreload(TIM1, PWM_PERIOD_T);/* *函数: PWM_T_Calculation描述:梯形波计算参数: HallValue 霍尔值, mRate 调制百分比, direction 方向返回:无*/void PWM_T_Calculation(u8 hallValue , u8 mRate , u8 direction)if(direction = 1)swi
21、tch(hallValue)case 5:PWM_T_Output(1 , 3 , mRate);break;case 1:PWM_T_Output(1 , 2 , mRate);break;case 3:PWM_T_Output(3 , 2 , mRate);break;case 2:PWM_T_Output(3 , 1 , mRate);break;case 6:PWM_T_Output(2 , 1 , mRate);break;case 4:PWM_T_Output(2 , 3 , mRate);break;default:PWM_T_Output(4 , 4 , 0);break;el
22、se精彩文档实用标准文案switch(hallValue)case 5:PWM_T_Output(3 , 1 , mRate);break;case 1:PWM_T_Output(2 , 1 , mRate);break;case 3:PWM_T_Output(2 , 3 , mRate);break;case 2:PWM_T_Output(1 , 3 , mRate);break;case 6:PWM_T_Output(1 , 2 , mRate);break;case 4:PWM_T_Output(3 , 2 , mRate);break;default:PWM_T_Output(4 ,
23、4 , 0);break;/*函数: PWM_T_Int描述:定时器中断程序,根据霍尔位置设置输出梯形波参数: direction=顺时针 / 逆时针 ,mRate 调制率返回:无*/void PWM_T_Int(u8 direction , u8 mRate)u8 hallValueTemp;u8 hallValue;hallValueTemp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) + (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12) 1) + (GPIO_ReadInputDataBit(GPIOA, G
24、PIO_Pin_15) 2);hallValue = hallValueTemp;PWM_T_Calculation(hallValue , mRate , direction);精彩文档实用标准文案/*函数: PWM_Stop描述: PWM控制信号使能输出, 禁止 TIM1 中断,使能TIM1 中断参数: pwmflag=DISABLE,PWM信号使能输出,pwmflag=ENABLE,禁止 PWM输出返回:无*/void PWM_Stop(u8 pwmflag)NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStr
25、ucture;if(pwmflag = ENABLE)/禁止 PWM输出TIM_Cmd(TIM1 , DISABLE);/TIM_Cmd(TIM2 , DISABLE);NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM16_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;NVIC_I
26、nit(&NVIC_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10); /PWM口/PWM_T_O
27、utput(4 , 4 , 0);if(pwmflag = DISABLE)/使能 PWM输出NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM16_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;GPIO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026新疆乌鲁木齐市第六十四中学招聘初中体育教师一人考试备考题库及答案解析
- 2026福建泉州城建集团权属企业项目制招聘13人笔试参考题库及答案解析
- 2026江西省金控投资集团有限公司社会招聘2人考试备考题库及答案解析
- 2026四川凉芯农业发展有限公司公开招聘业务主管1名考试模拟试题及答案解析
- 2026年金华兰溪市市属国企(兰创集团)春季公开招聘工作人员8人考试备考试题及答案解析
- 2026广西崇左扶绥县人民医院助理全科医生培训基地助培学员招聘24人考试备考试题及答案解析
- 2026国贸股份招聘笔试备考题库及答案解析
- 2026年上半年湖南湘西花垣县民族中医院招聘高校见习人员45人考试参考题库及答案解析
- 2026浙江省台州生态环境监测中心合同工招聘1人考试备考试题及答案解析
- 2026贵州省残疾人联合会直属事业单位第十四届贵州人才博览会引才工作笔试备考题库及答案解析
- 能源与动力工程测试技术 课件 第七章 流量测量
- 新高考背景下志愿填报解析课件
- 赣州xx停车场光储充项目技术方案
- 承包付钱协议书范本
- 数据采集与分析操作指南
- 耳穴压豆治疗:2024年中医新技术展望
- 国家开放大学电大《国际私法》形考任务1-5题库及答案
- 喀什地区农业产业发展报告
- 重难点20 三角函数解答题十一大题型【2024高考数学二轮复习题型突破】(解析版)
- 2024弱电施工合同范本弱电安装工程合同范本
- 国家职业技术技能标准 4-14-03-01 助听器验配师 人社厅发202051号
评论
0/150
提交评论