Verilog_PWM(Motor)

공이지·2024년 8월 3일

PWM을 이용한 LED제어

  • LED제어에서는 duty_step의 값은 LED의 빛을 부드럽게 변화시켜 다양한 색의 조합을 만들 수 있습니다. 우리가 주목해야할 것은 duty의 값인데 이 값은 clk_div와 연결합니다. 이 clk_div32bit으로 선언하여 몇번째 비트를 사용하느냐에따라 LED의 색이 빠르게, 느리게 변할 수 있습니다.

PWM을 이용한 Motor제어

  • 100MHz를 100으로 나누면 1us를 구할 수 있음. 그걸 duty_step = 4 를 주면 1us를 4단계로 구분할 수있음.
    pwm_freq기기에 따라서 동작하는 주파수가 다르기 때문에 parameter로 두고 값을 지정할 수 있게 해준것이다.
    duty_step은 내가 기기가 동작하는 주파수를 세밀하게 조절하기위해서 단계를 나눌 수 있다.(ex. 선풍기 3단으로 조절하거나, 좋은 자동차는 10단계 기어로 조절할 수 도 있다.)
    temp_half는 우리가 주기를 반복하려면 0과 1인 상태로 표현해야하기 때문!

상세설명

  • 1번은 우리가 PWM제어기기의 동작을 눈에 보이게 하기 위해서 주기를 늘려줘서 32개의 bit를 선언하고 clk이 돌때마다 clk_div에 + 1씩하면서 몇번비트를 사용하느냐에 따라서 기기가 동작하는 속도를 조절할 수 있다.
  • 2번은 1번에서 clk주기를 나눈 clk_div의 몇번 비트를 사용하는지 결정해줍니다. cp에 몇번비트를 사용할지 연결하여 주기가 돌아왔을때 원클락 펄스를 이용해 [26]번비트의 주기를 알려줍니다.
  • 3번duty라는 reg를 선언하여 우리가 PWM펄스를 사용할 구간을 설정합니다. 사진에서는 모터가 동작하는 구간을 결정합니다.
  • 4번은 우리가 동작할 기기의 동작주파수를 줘야합니다.

PWM을 이용한 서보모터제어

  • 서보모터에서는 동작구간이 1ms~2ms이므로 이구간을 설정하기위해 서보모터의 동작주파수 20ms(50Hz)pwm_freq로 주고 이 구간을 얼마나 나눌지 duty_step으로 나눕니다. 만약 100단계로 구간을 나눈다면 20ms를 100단계로 나눌때 1ms는 5%구간입니다.(20 / 100 = 0.2 이며 1이 되려면 X5 가 필요하므로 5퍼센트!)그렇다면 우리는 2ms구간 까지 펄스를 발생해야하므로 5~10%구간을 설정해줘야합니다!

서보모터 제어 방법들

  • 서보모터를 버튼으로 제어하거나, 방향을 설정하는reg를 선언하여 조건을 맞춰줄 수 있습니다. 서보모터의 각도는 duty_step의 값을 크게 설정할 수록 정교하게 서보모터의 각도를 조절할 수 있습니다. 이때 duty값을 FND에 표시하여 내가 원하는 각도일때 duty값을 측정합니다. 이를 버튼을 누를 때 기록한 duty값을 설정하면 원하는 각도로 서보모터를 제어 할 수 있습니다.
profile
화이팅..!

0개의 댓글