基于W801 对PWM学习笔记

Sdk版本 1.10

/** pwm work mode for signal generate */
enum tls_pwm_out_mode
{
    WM_PWM_OUT_MODE_BRAKE = 0, /**< brake mode 制动模式*/
    WM_PWM_OUT_MODE_ALLSYC,    /**< all synchronous mode [6]全通道同步模式使能信号*/
    WM_PWM_OUT_MODE_2SYC,      /**< two channel synchronous mode [15:14]2 通道同步模式使能信号PWM_CH0 和PWM_CH1具有相同的相位,且相位由PWM_CH0决定;PWM_CH2和PWM_CH3具有相同的相位,且相位由 PWM_CH2 决定15bit控制CH3和CH2 14bit控制CH1和CH0*/
    WM_PWM_OUT_MODE_MC,        /**< complementary互补 mode 输出模式0:每两个通道非互补模式1:每两个通道组成互补模式[1:0][1]控制CH2和CH3[0]控制CH0和CH1*/
    WM_PWM_OUT_MODE_INDPT      /**< independent mode 独立模式 */
};

/** interrupt type for capture mode */
enum tls_pwm_cap_int_type{
    WM_PWM_CAP_RISING_EDGE_INT,         /**< rising edge arises the interrupt 上升边产生中断*/
    WM_PWM_CAP_FALLING_EDGE_INT,        /**< falling edge arises the interrupt 下降边引起中断 */
    WM_PWM_CAP_RISING_FALLING_EDGE_INT, /**< both rising edge and falling edge arise the interrupt 上升沿和下降沿都产生中断 */
    WM_PWM_CAP_DMA_INT                  /**< dma request */
};


/** pwm output status */
enum tls_pwm_out_en_state{
    WM_PWM_OUT_EN_STATE_TRI,    /**< set tristate status PWM 管脚置为三态状态*/
    WM_PWM_OUT_EN_STATE_OUT     /**< set output status   PWM 管脚置为输出状态  shayk 手册标注out为0,三态为1*/
};



/** pwm count mode */
enum tls_pwm_cnt_type{
    WM_PWM_CNT_TYPE_EDGE_ALLGN_CAP,     /**< edge alignment(only capture mode) 边缘对齐模式(计数器计数方式为递增,仅针对捕获模式)*/
    WM_PWM_CNT_TYPE_EDGE_ALIGN_OUT,     /**< edge alignment(only output mode) 边缘对齐模式(计数器计数方式为递减,仅针对 PWM 模式)*/
    WM_PWM_CNT_TYPE_CENTER_ALIGN        /**< central alignment 中央对齐模式(仅针对 PWM 模式)*/
};


/** pwm cycle type */
enum tls_pwm_loop_type{
    WM_PWM_LOOP_TYPE_SINGLE,    /**< single mode PWM 生成循环方式 单次模式*/
    WM_PWM_LOOP_TYPE_LOOP       /**< auto load 自动装载模式*/
};


/** pwm waveform inversion mode */
enum tls_pwm_waveform_inversion{
    WM_PWM_WAVEFORM_NOINVERSION,    /**< not inverse PWM 输出信号极性使能 PWM 输出极性翻转不使能*/
    WM_PWM_WAVEFORM_INVERSION       /**< inversion PWM 输出极性翻转使能 注意:[5:2]每位分别控制每个通道,从高到低依次控制 PW3、PW2、PW1 和 PW0*/
};



/** pwm output level in the brake mode */
enum tls_pwm_brake_out_level{
    WM_PWM_BRAKE_OUT_HIGH,          /**< output high level 制动输出控制寄存器       当制动模式有效时,PWM 输出低电平 [7:3]分别对应 CH4、CH3、CH2、CH1 和 CH0*/
    WM_PWM_BRAKE_OUT_LOW            /**< output low  level 当制动模式有效时,PWM 输出高电平 shayk 手册标注 out_low =0 out_high=1*/
};


/** pwm initial parameters */
typedef struct _pwm_init_param{
    enum tls_pwm_out_mode mode;         /**< work mode */
    u8 channel;                         /**< channel id 0~4 */
    u16 clkdiv;                         /**< clock divided value */
    u8 period;                          /**< period value(output frequency F = CLK/CLK_DIV/PERIOD) */
    u8 duty;                            /**< duty radio (range 0~255, high level or low level by out_inversion decided */
    bool dten;                          /**< enable dead zone time (ENABLE or DISABLE) */
    u8 dtclkdiv;                        /**< dead zone clock divided value (0~3) */
    u8 dtcnt;                           /**< period number of dead zone time  (0~255) */
    enum tls_pwm_cnt_type cnt_type;     /**< count type */
    enum tls_pwm_loop_type loop_type;   /**< cycle type */
    bool inverse_en;                    /**< output is inverse */
    u8 pnum;                            /**< generate interrupt after pnum period 在pnum周期后产生中断 */
    bool pnum_int;                      /**< period interrupt is enable */
}pwm_init_param;

//    pwm测试

       wm_pwm0_config(WM_IO_PB_00);//gpio定义

       tls_pwm_stop(0);

       tls_pwm_init(0, 2200, 50, 0);

       tls_pwm_start(0);

int tls_pwm_init(u8 channel,        // pwm channel, range from 0 to 4
        u32 freq,              // freq range from 1 to 156250
        u8 duty,               // duty range from 0 to 255
        u8 pnum)             // period num,range from 0 to 255
        int tls_pwm_duty_config(u8 channel, u8 duty); // used to set duty ratio

for(int i=0;i<255;i++){
              tls_pwm_duty_config(0, i);
              tls_pwm_start(0);
              tls_os_time_delay(5);
}

for(int i=255;i>0;i--){
              tls_pwm_duty_config(0, i);
              tls_pwm_start(0);
              tls_os_time_delay(5);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于W801单片机的智能手机充电器是一种能够更加智能化管理和保护手机充电的设计方案。这款充电器采用了W801单片机作为主控芯片,通过其强大的计算和控制能力,实现了多种功能和优化。 首先,基于W801单片机的充电器可以根据手机电池的容量和电压等信息,智能调节充电电流和电压。通过与手机之间的通信,充电器可以了解手机电池的具体状态,并根据需要进行快速充电或是低电流充电,以达到最佳充电效果,同时避免过度充电对手机电池的损害。 其次,充电器还具备安全保护功能。例如,基于W801单片机的充电器可以实现过充保护,当手机电池充满后自动停止充电,避免过度充电导致手机电池损坏。另外,充电器还可以监测电流和电压的异常情况,一旦发现异常即刻停止充电,确保手机充电安全。 此外,基于W801单片机的充电器还可以具备智能管理功能。它可以通过内置的计时器功能,记录手机充电时间和充电历史,帮助用户了解充电习惯和充电特点。同时,它还可以与用户的手机APP进行连接,实现远程控制和监测。用户可以通过手机APP查看充电器状态、调整充电参数等。 综上所述,基于W801单片机的智能手机充电器设计具备智能调节充电电流和电压、安全保护功能以及智能管理等特点,能够更好地满足用户对手机充电的需求,提供更加智能和安全的充电体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值