Because the output control value changes the moment the CCRx value is reached and the moment the timer overflows, and the timer doesn't overflow until the clock edge after the ARR value is reached, the Duty Cycle should equal CCRx/(ARR+1) and not CCRx/ARR. By adding the "-1" to the "Period" configuration parameter, you are technically setting the ARR value to be one less than what your calculation is using. So when you set the period equal to "10-1", the ARR value is technically 9 (and not 10 as you suggest. And so the equation should have (ARR+1) in the denominator.
ooh damn, when I heard the robot voice I thought this was gonna be a garbage video but your english is actually spot on. perhaps speed it up just a little bit in the future?
Yes why won't it ? Just update the pwmData at any point in the entire code. The DMA has been assigned with the address if the buffer, not the value. So its doesn't matter what value you pass.
Thank you very much! I applied each step but with the DMA part I got only 5 pulses (10,..50)us with a period of 200us, is there a specific setting I should add to the DMA controller? thanks again
What software are you using to get the waveforms? I've been using an actual oscilloscope, and it is fine, but having that built into your software looks nice.
@@ControllersTech cool! Thanks. That actially just reminded me that the scope I got has software thay goes with it that I never bothered installing. I should probably try it out.
I am using logic analyzer like yours, i put trigger and see the different pwms 10%, 20% to 90% one time, not in cycle, don´t work like you explain, stops and do only one time this presentation. Have to set OUTPUT COMPARE PRELOAD to enable because if you set to disable will not work. So this works only one time and not repeat the signals.
@@ControllersTech so all your calculation are based on the fact that we will get 10000 lets say pulses in one second and each pulse will be 100us? and out of that 100us we will have 50us Hight and 50 low (this is the duty cycle ) Am I right ?
It's genuinely funny. I did the exact same thing, adapted to my Nucleo C031C6 board, connected it to a Logic analyzer and there's no signal on the pin, just a low active fucking bar.
@@ControllersTech ok so to adapt your video to my needing a i would do 16MHz/50Hz = 320 000. To divide it between the Prescaler and ARR i could do PSC = 8-1 and ARR = 40000-1. But then how to set the duty cycle (ex. 50%) ? Tmr1->CCR = 20000?
@@ControllersTech So the reason why you are able to write 30, 50 and they are actually 30% and 50% duty cycle is just because you have ARR = 100 right? So if I wanted to have the same thing I could write tmR1-> CCR = (x) / 40000 * 100 ? Or am I wrong?
How to use DMA to change pulse frequency? DMA changes the value in the CCR register, how to switch the DMA to change in the ARR register?I want to use Timers and DMA to generate pulses for a stepper motor. For a normal start of the stepper motor, you need to smoothly increase the frequency to the specified one and also stop it by smoothly reducing the frequency. STM has Application note AN2820 how to implement this using DMA and timer. But I want to see a video tutorial on how to do it. Can you give a tutorial on how to change the frequency and tune the duty cycle using DMA? thanks
Hello, I tryed the part of the code using DMA on STM32F407VET6 and don´t work. I did all the steps, i need help. The other things worked, but DMA not, maybe there is some more configuration to do but i not discover.
Check if the interrupt for the respective DMA channel is enabled in the NVIC settings. If not, then enable it and give it some priority. I think the cube have changed some configurations in the recent updates.
This is why it does not work for some other users; HAL_TIM_PWM_Start_DMA function have to be in the while loop, Otherwise it does not output any signal.
The cubeide does not auto complete the instructions, you have to press the ctrl + space. Whenever you generate the code from cubemx, build the project once before writing the code.
You mean how fast the DMA would be able to transfer the data ? There is no definitive answer to that. Also i haven't seen anywhere ST mentioning this. It depends on a lot of factors like your CPU clock, your GPIO speed, the data size etc. So best way is to test yourself.
@@ControllersTech I was just curious what is the limit of stm32f103c8. But you are right, testing is best way to see. I'll test it on bluepill (clone), so tnx for the video.
Hi. I have a STM32L462 custom board with 40Mhz clock setup. I need to generate pwm for 9600,19200,38400 and 76800 hz. First 3 works fine but 76800 doesnt work. Used a counter to verify. It counts upto 50270 or 51000 only. Its not a very high frequency. So why is there a issue!? Can someone help me!?
There are showing an error during debug of code - ''no st-link detected please connect st-link and start the debug session''. How to solve, plz guide to overcome from this error
Sir another question - from where we can see the PWM pulse after debugging of that code... I mean do we need to install another application??or can we get that in lDE only??
You need to have some hardware like oscilloscope or at least a signal analyzer. Then just connect the pwm output to the analyzer and view the waveform in it's software
Because the output control value changes the moment the CCRx value is reached and the moment the timer overflows, and the timer doesn't overflow until the clock edge after the ARR value is reached, the Duty Cycle should equal CCRx/(ARR+1) and not CCRx/ARR. By adding the "-1" to the "Period" configuration parameter, you are technically setting the ARR value to be one less than what your calculation is using. So when you set the period equal to "10-1", the ARR value is technically 9 (and not 10 as you suggest. And so the equation should have (ARR+1) in the denominator.
ControllersTech! You never disappoint. Thanks a bunch....
Suas aulas e demostração me ajudam muito ,muito obrigado, sou do Brasil 🇧🇷 e agradeço muito 👍👍
the best explenation i have seen , thank you !
Thank you very much, I searched just for this all the day. Problem solved!
Such quality content. Nice work. Thanks.
ooh damn, when I heard the robot voice I thought this was gonna be a garbage video but your english is actually spot on. perhaps speed it up just a little bit in the future?
7:16 what program did you use to see pulse wave??
There is a error, if you not put DMA Request Settings changing from Normal to Circular the 10 different PWM not work.
Thanks for this video. I have a question. What type of Logic Analyzer in this video?
Sealogic
Can we do it in Digital Oscilloscope?@@ControllersTech
Yeah why not
Wonderful tutorial, as usual! :D
can we use pwm in fsk transmitter? if yes can you please guide us a little?
You can use, but you need another hardware which takes the pwm as input and modifies the frequency of the signal based on the input width.
First of all, it's a very good video. but for example can it take a value processed inside the while loop as pwm with dma?
Yes why won't it ?
Just update the pwmData at any point in the entire code.
The DMA has been assigned with the address if the buffer, not the value.
So its doesn't matter what value you pass.
@@ControllersTech You are perfect :) thanks...
Great tutorial, can I use it to control DC motor?
Certainly!
This is exactly what you need to use to control step motors. Also same technique with floating duty cycle used to make breathing leds
What is the name of your application that you use to see PWM signal waves?
Its a hardware, logic analyzer
@@ControllersTech That's cool, thanks mann
Which software you used to see waveforms?
I used a logic analyzer. The software is complementary
How logic analyzer is connected to stm32 cube ide
It is connected to the mcu, The PWM pin.
Thank you very much! I applied each step but with the DMA part I got only 5 pulses (10,..50)us with a period of 200us, is there a specific setting I should add to the DMA controller? thanks again
What software are you using to get the waveforms? I've been using an actual oscilloscope, and it is fine, but having that built into your software looks nice.
Its actually a hardware, logic analyzer. The software is complementary.
@@ControllersTech cool! Thanks. That actially just reminded me that the scope I got has software thay goes with it that I never bothered installing. I should probably try it out.
Best tutorial was so simple to implement
I am using logic analyzer like yours, i put trigger and see the different pwms 10%, 20% to 90% one time, not in cycle, don´t work like you explain, stops and do only one time this presentation. Have to set OUTPUT COMPARE PRELOAD to enable because if you set to disable will not work. So this works only one time and not repeat the signals.
A quick question , so what is equal with 1 second :TIM CLOCK of 1Mhz or the FREQUENCY of 10Khz?
I don't understand the question
@@ControllersTech so all your calculation are based on the fact that we will get 10000 lets say pulses in one second and each pulse will be 100us? and out of that 100us we will have 50us Hight and 50 low (this is the duty cycle ) Am I right ?
Yes.
@@ControllersTech thank you
Thanks for the formulas , there so easy to understand .
How do you select the value of prescaler??
hi, I am a beginner , can you please explain, how many clocks are there, what is internal and external clock, what are the channels, PLL,
where to get the user manual, which document you found the "14.4.11 TIM1 and TIM8 prescaler"
User manual for your controller can be downloaded from ST's website. You should have it before you start programming.
can you tell me ...what will be the prescaler and counter period for 1 min?
great video 👏
Great tutorial bro. THX
It's genuinely funny. I did the exact same thing, adapted to my Nucleo C031C6 board, connected it to a Logic analyzer and there's no signal on the pin, just a low active fucking bar.
sad
Hi, what if I want to control a 50Hz motor with an stm32 which has 16Mhz Clock?
Use prescalar and arr to bring the clock down to 50 Hz.
Check out the servo motor video in this playlist
@@ControllersTech ok so to adapt your video to my needing a i would do 16MHz/50Hz = 320 000. To divide it between the Prescaler and ARR i could do PSC = 8-1 and ARR = 40000-1.
But then how to set the duty cycle (ex. 50%) ? Tmr1->CCR = 20000?
Yes you got it correct
@@ControllersTech oh thanks ;) 🙏
@@ControllersTech So the reason why you are able to write 30, 50 and they are actually 30% and 50% duty cycle is just because you have ARR = 100 right? So if I wanted to have the same thing I could write tmR1-> CCR = (x) / 40000 * 100 ? Or am I wrong?
How to use DMA to change pulse frequency? DMA changes the value in the CCR register, how to switch the DMA to change in the ARR register?I want to use Timers and DMA to generate pulses for a stepper motor. For a normal start of the stepper motor, you need to smoothly increase the frequency to the specified one and also stop it by smoothly reducing the frequency. STM has Application note AN2820 how to implement this using DMA and timer. But I want to see a video tutorial on how to do it. Can you give a tutorial on how to change the frequency and tune the duty cycle using DMA? thanks
I'll check it out
How do you display the pulse on the screen?
Hello, I tryed the part of the code using DMA on STM32F407VET6 and don´t work. I did all the steps, i need help. The other things worked, but DMA not, maybe there is some more configuration to do but i not discover.
Check if the interrupt for the respective DMA channel is enabled in the NVIC settings. If not, then enable it and give it some priority.
I think the cube have changed some configurations in the recent updates.
@@ControllersTech DMA2 Stream1 Global Interrupt in NVIC is gray and maked but i can´t clean or set, not possible. My version of Cube IDE is 1.10.1
@@ControllersTech It runs one time, but not repeat the pulses again and again, only one time.
@@ControllersTech i did but the pwms appear but one time only and with trigger
Need to see the code.
Either open a thread on the website, or ask in the telegram/discord groups. Links are in the description
very nice tutorial thank you
can you tell me, what is the name of that signal-generating software
How can i generate the sinewave and other waves with STM32F4?
There is already a video on this channel for sine wave. Please search it.
This is why it does not work for some other users;
HAL_TIM_PWM_Start_DMA function have to be in the while loop, Otherwise it does not output any signal.
It shouldn't. That defies the purpose of calling the DMA function.
Pls can u upload a use case of multibufferstartIT to generate pwm . I don't really get it and documentation is very poor from st not a single example
ACTUALLY AUTO INSTRUCTIONS ARE NOT COMMING IN MY PROGRAMMING WHAT I DO? ALTHOW I TAP CRTL+SPACE.
PLEASE REPLY. IT SHOWS NO DEFAULT PROPOSAL
The cubeide does not auto complete the instructions, you have to press the ctrl + space.
Whenever you generate the code from cubemx, build the project once before writing the code.
@@ControllersTech thank you I will try.
Does anyone know why STM32 MCUs are so rare to find for the past couple of months?
There is a chip shortage. Too high demand for chips and the production is lagging behind. I saw certain chips with >52 weeks lead time...
What is the lower limit of DMA controller? Is it able to push data to CCR1 register, if prescaler is 0 (1) and ARR register is 15 (16 ticks)?
You mean how fast the DMA would be able to transfer the data ?
There is no definitive answer to that. Also i haven't seen anywhere ST mentioning this.
It depends on a lot of factors like your CPU clock, your GPIO speed, the data size etc.
So best way is to test yourself.
@@ControllersTech I was just curious what is the limit of stm32f103c8. But you are right, testing is best way to see. I'll test it on bluepill (clone), so tnx for the video.
7:10 what's the name of app that show the wave?
Saleae
Can we change frequency (variable frequency)as we changed the duty cycle?
You can use __HAL_TIM_SET_PRESCALER to change the prescalar.
@@ControllersTech can i change frequency with dma ?
Nice Video. Thanks.
very good job
What is the name of the program you are using to see the signal
It's a logic analyzer.
Hi
I have tried same method only. But I am not getting any pulse, can you please help me
check if you have started the timer in PWM mode or not.
Hi.
I have a STM32L462 custom board with 40Mhz clock setup. I need to generate pwm for 9600,19200,38400 and 76800 hz. First 3 works fine but 76800 doesnt work. Used a counter to verify. It counts upto 50270 or 51000 only. Its not a very high frequency. So why is there a issue!? Can someone help me!?
What's tool used to see the wave form
thanku so much
Use 32f103 ADC read pwm control
Please explain to me the xor mode
is this window 11 ??
I can send my code to see if there is another problem to run like yours
useful thanks
There are showing an error during debug of code - ''no st-link detected please connect st-link and start the debug session''. How to solve, plz guide to overcome from this error
As the error says. Connect the st link.
Sir another question - from where we can see the PWM pulse after debugging of that code... I mean do we need to install another application??or can we get that in lDE only??
@@ControllersTech how i link them
You need to have some hardware like oscilloscope or at least a signal analyzer.
Then just connect the pwm output to the analyzer and view the waveform in it's software
@@ControllersTech thanks for all
oh, then that´s the reason that I can´t watch the first video about PWM
Just doesn't work.
The meme voice is kind of distracting.
hell no. it's perfect. i don't want to hear any human's voice that's for damn sure.