JackTang1994 发表于 2024-12-1 19:40

PIC16F13145—CLB实现SG90舵机驱动波形

本帖最后由 JackTang1994 于 2024-12-1 19:42 编辑

#每日话题# #技术资源#
我们可以利用PIC16F13145—CLB模块产生特定的波形,比如:SG90舵机的20ms周期的脉冲波形。

CLB-SG90舵机波形生成Verilog代码
module SG90_Driver(CLK,in2,in1,in0,out_pin);
input CLK;
input in2,in1,in0;
output reg out_pin;
reg counter;

initial //初始化相关引脚及变量
    begin
      counter <= 1; // 从1开始计数脉冲数
      out_pin <= 0; // 初始化状态输出引脚为低电平
    end
   //循环执行的代码块
always @(posedge CLK)
    begin
      if(counter == 39) // 39个0.5ms脉冲即20ms
      begin
          counter <= 1; // 重新从1开始计数
          out_pin <= 0;
      end
      // 小于或者达到设定的脉冲数量
      else if(counter <= {in2,in1,in0})
      begin
          out_pin <= 1;
          counter <= counter + 1;
      end
      else // 20ms剩余的时间
      begin
          out_pin <= 0;
          counter <= counter + 1;
      end
    end
endmodule
逻辑分析仪抓取到的CLB产生的波形


详细的操作过程,请查看原文链接:https://mp.weixin.qq.com/s/SLNTV5P1x3ZTfDVZkgnQ8g?token=1567580201&lang=zh_CN


lcczg 发表于 2024-12-2 14:11

厉害,学习了。   

guijial511 发表于 2024-12-2 19:04

PIC单片机现在用的人还多吗?

gejigeji521 发表于 2024-12-29 14:25

这使用的什么原理啊,是什么个思路?

纠结的那些年 发表于 2025-3-24 19:07

counter <= 1; 这样初始化计数器可能会导致第一次不产生 0.5ms 的脉冲,您可以考虑初始化为 counter <= 0;,这样从 0 开始计数会更符合预期。

4c1l 发表于 2025-3-25 12:54

如果您的输入值需要动态控制脉冲宽度,可以采用一个更灵活的计数逻辑,使其能够适应更广泛的脉冲宽度控制。

g36xcv 发表于 2025-3-27 16:43

你提供的Verilog代码用于使用PIC16F13145的CLB模块生成适用于SG90舵机的20ms周期脉冲波形。

而服务器人 发表于 2025-3-31 15:52

这段 Verilog 代码能够通过 CLB 模块生成 20ms 周期的脉冲信号,控制 SG90 舵机的角度。输入信号 in2, in1, in0 用于设置脉冲宽度,从而调整舵机的旋转角度。
页: [1]
查看完整版本: PIC16F13145—CLB实现SG90舵机驱动波形