直流电机转速负反馈调节器拖动系统课程设计报告(编辑修改稿)内容摘要:

全解决问题, 经过 思考,系统时钟较快, 如果 按下时, 系统 可以执行两遍扫描程序, 那便 依然会出现上述问题, 于是 还要加按键释放检测。 加了 按键释放检测, 上述 问题便迎刃而解。 所以 一个键盘扫描程序用必须要有防抖延时和释放检测这两个环节。 第三个模块就是 PWM 模块, 这个 模块是芯片上就有的功能, 初始化 配置之后便可使用。 因为 模块这个要配合按键输入占空比进行调速, 首先 第一个问题便是修改按键程序与之协调, 并 要添加正转, 反转 , 停止 和占空比设置函数。 在程序编写完毕后, PWM 调速已经没有问题, 但是 启停正反转无法实现, 还有 一个问题便是停止后, 让 电机启动要进入哪个状态。 主要问题 便是电机的正反转问题,刚开始正反转便是让一路 PWM 占空比为 0,另一路有占空比不为 0进行正反转控制, 但是 经过示波器观察发现, 占空比 不为 0 时无任何问题, 但是 占空比为 0 时, PWM 输出管脚竟然是高电平, 与理想中不一样。 于是,设想如果 PWM 为 0 不能实现高电平,那么关掉 PWM 发生器, PWM 发生器输出管脚应该就为低电平,可是经过测试后发现, PWM输出管脚依旧为高电平,无奈只能去找资料还有查看 M4函数定义以及数据手册,然后经过大量测试发现将 PWM 输出管脚输出功能关闭之后, PWM 输出管脚为低电平,才解决问题。 第四部分便是正交编码模块, 由于 TI的数据手册虽然介绍的正交编码模块, 但是没有讲解如何用函数去配置正交编码模块, 就连 TI的官方例程都没关于正交编码的程序, 无奈 只能去查找 TI 的函数库以及用其他厂商的 M4芯片正交编码的程序作为参考,但是当程序编写出来后, 并不能 像想象中一样运行, 经测试 正交编码输入信号正常,而且由于其他模块在此模块前均正常工作,在加此模块后,除了初始化正交编码模块程序外, 就 加了用正交编码模块的速度获取函数以及电机运转反向获取函数然后 送与数码管进行显示, 所以 问题的出现极大可能出现在正交编码的初始配置上, 因为 正交编码的初始化函数并不是 TI 提供的, 经过 查阅大量的 TIM4 系列类似本芯片的正交编码 函 数 以 及 TI 论 坛 的 大 量 程 序 , 发现 初 始 化 配 置 中 缺 少 了GPIOPinConfigure(GPIO_PC5_PHA1)。 这一句 GPIO 复用功能配置函数。 加上 此函数后,程序 运行正常,模块功能正常。 浙江理工大学拖动系统课程设计 第 11 页 5. 结束语 在这次课程设计中,由于用了很多刚接触的东西, 我学会了 很多,例如在这次我用了刚接触的串口 4 位数码管, 还有 矩阵按键的原理虽然原来知道, 但也是 第一次变为现实。 最 为 重要的我知道了如何自学 一种 芯片 ,原来的我只知道跟着例程做,现在我知道了要去查这个芯片的函数库,我也知道了如何运用一款芯片的数据手册。 所以这次课设不仅提高了我对电机拖动的理解,最为重要的是提高了我的自学能力。 参考文献: 【 1】 叶朝辉: TM4C123 微处理器原理与实践。 北京: 清华大学出 版社, 【 2】 百度文库 .直流电机 PID 控制。 网址 : tRtVtzUpEhMSsadKIFCPZJWoAFJi6rTOuzKFxxt9hzXpBwTU6RMl71RqVhrbUgDQfkESjABk8Pa 【 3】 阮毅、 陈伯时 电力拖动自动控制系统 —— 运动控 制系统。 机械工业出版社 【 4】 Tiva™ TM4C123FH6PM 微控制器数据手册 【 5】 德州仪器在线技术支持社区 _arm_cortex/f/96/t/ 浙江理工大学拖动系统课程设计 第 12 页 附录 课设程序: include include include inc/ include driverlib/ include driverlib/ include driverlib/ include driverlib/ include driverlib/ define uchar unsigned char define PERIOD_TIME SysCtlClockGet()/2020 define DIO GPIO_PIN_1 define RCLK GPIO_PIN_2 define SCLK GPIO_PIN_3 int anjianzhi=1。 uchar LED[8]。 uchar LED1[8]。 uchar jianceTime=0。 double PulseWidth。 unsigned long speed_signal=0。 uint32_t setspeed=0,speed=0。 int speedDirectionGet=0。 int e[3]。 double uk,past_uk,out。 uchar speedstop=0。 /***************************************************************************************PWM 初始化 ****************************** ***************************************************************/ void Init_PWM() { PulseWidth=。 // 设置 PWM 时钟和系统时钟一致 SysCtlPWMClockSet(SYSCTL_PWMDIV_1)。 // 使能 PWM 外设 SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0)。 浙江理工大学拖动系统课程设计 第 13 页 // 使能外设端口 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB)。 //设置对应管脚的 PWM 信号功能 GPIOPinConfigure(GPIO_PB4_M0PWM2)。 GPIOPinConfigure(GPIO_PB7_M0PWM1)。 //设置 PWM 信号端口 GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_4)。 GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_7)。 //PWM 生成器配置 PWMGenConfigure(PWM0_BASE, PWM_GEN_1, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC)。 PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC)。 //设置 PWM 信号周期 PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, PERIOD_TIME)。 PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, PERIOD_TIME)。 //设置 PWM 信号占空比 PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2,PulseWidth*PERIOD_TIME)。 PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1,PulseWidth*PERIOD_TIME)。 // 使能 PWM 输出端口 PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false)。 PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false)。 // 使能 PWM 生成器 PWMGenEnable(PWM0_BASE, PWM_GEN_1)。 PWMGenEnable(PWM0_BASE, PWM_GEN_0)。 // 使能 PWm 生成器模块的及时功能 . PWMSyncTimeBase(PWM0_BASE, PWM_GEN_1)。 PWMSyncTimeBase(PWM0_BASE, PWM_GEN_0)。 } /*******************************************************************************************电机控制 **************************** ***************************************************************/ void govern_speed(void) { PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, PulseWidth*PERIOD_TIME)。 PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, PulseWidth*PERIOD_TIME)。 } 浙江理工大学拖动系统课程设计 第 14 页 void forward(void) { speedstop=0。 PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, true)。 PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false)。 } void reverse(void) { speedstop=0。 PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, true)。 PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false)。 } void stop(void) { speedstop=1。 PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false)。 PWMOutputState(PWM0_BA。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。