在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

            EEPW首頁(yè) > 博客 > 使用rt-thread pwm 框架實(shí)現(xiàn)支持電機(jī)正反轉(zhuǎn)例子

            使用rt-thread pwm 框架實(shí)現(xiàn)支持電機(jī)正反轉(zhuǎn)例子

            發(fā)布人:電子禪石 時(shí)間:2023-03-08 來(lái)源:工程師 發(fā)布文章
            #include <rtthread.h>
            #include <rtdevice.h>
            #include <drv_pwm.h>
            #define PWM_CHANNEL 1
            #define PWM_PERIOD 20000 /* 20ms */
            #define MOTOR_FORWARD 1
            #define MOTOR_BACKWARD 0
            struct motor_device
            {
                struct rt_device_pwm *pwm_device;
                rt_uint32_t channel;
                rt_uint32_t period;
                rt_uint32_t forward_duty;
                rt_uint32_t backward_duty;
            };
            /* 初始化電機(jī)設(shè)備 */
            static rt_err_t motor_init(struct motor_device *motor, const char *pwm_device_name)
            {
                /* 獲取PWM設(shè)備 */
                motor->pwm_device = (struct rt_device_pwm *) rt_device_find(pwm_device_name);
                if (motor->pwm_device == RT_NULL)
                {
                    rt_kprintf("motor device %!s(MISSING) not found!\n", pwm_device_name);
                    return -RT_ERROR;
                }
                motor->channel = PWM_CHANNEL;
                motor->period = PWM_PERIOD;
                motor->forward_duty = 0; /* 初始正轉(zhuǎn)占空比為0%!(BADWIDTH)%!/(MISSING)
                motor->backward_duty = 0; /* 初始反轉(zhuǎn)占空比為0%!(BADWIDTH)%!/(MISSING)
                /* 初始化PWM設(shè)備 */
                rt_pwm_set(motor->pwm_device, motor->channel, motor->period, motor->forward_duty);
                return RT_EOK;
            }
            /* 設(shè)置電機(jī)正轉(zhuǎn)占空比 */
            static void motor_set_forward_duty(struct motor_device *motor, rt_uint32_t duty)
            {
                motor->forward_duty = duty;
                rt_pwm_set(motor->pwm_device, motor->channel, motor->period, motor->forward_duty);
            }
            /* 設(shè)置電機(jī)反轉(zhuǎn)占空比 */
            static void motor_set_backward_duty(struct motor_device *motor, rt_uint32_t duty)
            {
                motor->backward_duty = duty;
                rt_pwm_set(motor->pwm_device, motor->channel, motor->period, motor->backward_duty);
            }
            /* 控制電機(jī)正反轉(zhuǎn) */
            static void motor_control(struct motor_device *motor, rt_uint8_t direction)
            {
                if (direction == MOTOR_FORWARD)
                {
                    /* 正轉(zhuǎn) */
                    rt_pwm_set(motor->pwm_device, motor->channel, motor->period, motor->forward_duty);
                }
                else if (direction == MOTOR_BACKWARD)
                {
                    /* 反轉(zhuǎn) */
                    rt_pwm_set(motor->pwm_device, motor->channel, motor->period, motor->backward_duty);
                }
                else
                {
                    /* 停止 */
                    rt_pwm_set(motor->pwm_device, motor->channel, motor->period, 0);
                }
            }
            /* 電機(jī)測(cè)試函數(shù) */
            static void motor_test(struct motor_device *motor)
            {
                /* 正轉(zhuǎn)1s,反轉(zhuǎn)1s,停止1s */
                motor_control(motor, MOTOR_FORWARD);
                rt_thread_mdelay(1000);
                motor_control(motor, MOTOR_BACKWARD);
                rt_thread_mdelay(1000);
                motor_control(motor, 2);
                rt_thread_mdelay(1000);
            }
            /* 電機(jī)設(shè)備對(duì)象 */
            static struct motor_device motor;
            int motor_pwm_sample(void)
            {
                /* 初始化電機(jī)設(shè)備 */
                motor_init(&motor, "pwm");
                /* 測(cè)試電機(jī) */
                motor_test(&motor);
                return 0;
            }

            在上述代碼中,我們定義了一個(gè) motor_device 結(jié)構(gòu)體,用于保存電機(jī)的 PWM 設(shè)備、通道、周期、正轉(zhuǎn)占空比和反轉(zhuǎn)占空比等信息。motor_init 函數(shù)用于初始化電機(jī)設(shè)備,其中我們通過(guò) rt_device_find 函數(shù)獲取 PWM 設(shè)備并保存到 motor->pwm_device 中。motor_set_forward_dutymotor_set_backward_duty 函數(shù)用于設(shè)置電機(jī)正轉(zhuǎn)和反轉(zhuǎn)占空比,motor_control 函數(shù)根據(jù)傳入的參數(shù)控制電機(jī)正反轉(zhuǎn)或停止。motor_test 函數(shù)用于測(cè)試電機(jī)的正反轉(zhuǎn)功能。 在主函數(shù)中,我們調(diào)用 motor_init 函數(shù)初始化電機(jī)設(shè)備,并調(diào)用 motor_test 函數(shù)測(cè)試電機(jī)的正反轉(zhuǎn)功能。

            *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



            關(guān)鍵詞: rt-thread

            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉