cancel
Showing results for 
Search instead for 
Did you mean: 

PWM help

Spanky
Associate II

Hi everyone,

Happy Holidays!

I need some help if available please.

I need a program that I can install on an STM32 bluepill development board that outputs a PWM signal to emulate a temperature and level sensor as part of a community project.

This is low budget sadly, I have a reasonable level of knowledge in this arena but not enough.

I have the development board and the ability to program it using either USB or an ST-Link. I have a raspberry pi I am using as an oscilloscope. Soldering station, components and so on if.

I have read an awful lot of material relating to the subject of PWM generation using an STM32 bluepill, I’ve not specifically found anything trying to do what I am, close perhaps.

Not close enough with my understanding to alter to suit, so I am looking for help.

The PWM output I need has a frequency of 1hz (1000ms) however it has an initial 10ms pulse followed by a 920ms pause as a checksum which is only sent on initial power on of the 5v switched supply.

Then I need to produce 3 repeating pulses (repeated every 1000ms) One of these pulses has a pulse length that changes over time until a fixed limit.

Ultimately each of the 3 pulses is sent within a fixed 110ms period at the start of the 1000ms interval, with the 3 pulses taking 330ms in total, followed by a 670ms pause then the process repeats with a modification to Pulse A duration every 300,000ms until a fixed period on pulse A of 80ms.

Pulse A (0-110ms) - This is Emulating a Temperature sensor. (minimum pulse duration is 60ms, max pulse duration is 80ms, pause until 110ms)

Pulse B (110-220ms) - This is Emulating a Level sensor (I just need a fixed pulse duration of 88ms from 110ms, so 110ms to 198ms and a pause until 220ms)

Pulse C (220-330ms) - This is Emulating a Diagnosis signal (fixed pulse duration of 44ms from 220ms, so 220ms to 264ms and a pause until 330ms)

Then a pause until 1000ms and repeat.

Written in a different way:

Initial pulse with a length of 10ms

Pause for 920ms

Start timer

At 0ms Pulse A - with a length of 57ms

Then a pause until 110ms.

At 110ms Pulse B with a length of 88ms

Then a pause until 220ms

At 220ms Pulse C with a length of 44ms

Then a pause until 330ms

Then a pause until 1000ms.

Repeat from start timer until 300,000ms

At 300,000ms increase pulse A to 58ms and continue, At 600,000 increase pulse A to 59ms and so on at 300,000ms intervals, until Pulse A is 80ms at which point it gets no longer and stays at 80ms.

On power off, when restarted repeats the above.

A really nice but not important feature would be for the device to be able to lower the length of Pulse A after the main power has been switch off.

For example if i add a rechargeable Li-ion battery and have a switched 5v live that triggers the PWM output, when the 5v switched live turns off a timer reduces pulse A from its last length by 1ms for every 300000 until Pulse A reaches 57ms, then the unit switches off/low power until 5v switched supply returns and the PWM emulation restarts.

If switched supply returns before pulse A reaches 57ms the PWM emulation starts from the length pulse A is at during the countdown.

I would appreciate any help.

This discussion is locked. Please start a new topic to ask your question.
1 ACCEPTED SOLUTION

Accepted Solutions
Peter BENSCH
ST Employee

This thread relates to a so-called Blue Pill, which uses illegally cloned STM32F103. ST resources are only dedicated to supporting genuine ST products. We are not committed to ensuring that clones/fakes products work properly with the firmware we provide.

We recommend to purchase genuine products from STMicroelectronics and purchase them from known and trusted distributors.

This thread will now be locked. However, if you face difficulties while using genuine ST products, we’re here to assist you. Please feel free to start a new thread, and our team, along with community members, will be ready to help you with any issues/questions you encounter.

Thank you for your understanding.

Regards
/Peter

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

View solution in original post

4 REPLIES 4

So not 1 Hz as the STM32 would see it.

You can drive GPIO pin levels at 1 KHz (1ms) resolution via SysTick, perhap 10 KHz if you need sub-ms resolution. Create a schedule lists, and work thru it.

You could clock a pattern to a GPIO via a TIM+DMA to GPIOx->BSRR, this would perhaps afford sub-us placement.

The TIM are all 16-bit, the prescale and period are N-1 values. Prescales from APBx's TIM CLK (see clock tree in RM0008)

You can control pulse separation via period (TIM->ARR) and pulse width per channel via width (TIM->CCRx), you could sequence/chain a pulse train by programming new ARR/CCRx at each update for PWM Mode 1.

You could flip a GPIO pin state for a TIM CHx pin via Toggle Mode, and advancing the TIM->CCRx

There's a cook-book for the TIM, this may give you other ideas.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Spanky
Associate II

Thank you

More to understand, I need to be able to explain this also. :)

I’ve managed to get the PWM output, since then using a scope I’ve worked out I need a 1v baseline with a 500mv pulse.

The actual program was pretty simple really, setting up the timer and then manually turning the pulse on / off and then repeat.

I can duplicate the signal, but nothing online, including the blue pill info has helped with the 1v baseline.

Any ideas please?

I’m using a buck converter for 12v - 5v for the blue pill.

Is it possible with the blue pill, I can add on a circuit even?

Peter BENSCH
ST Employee

This thread relates to a so-called Blue Pill, which uses illegally cloned STM32F103. ST resources are only dedicated to supporting genuine ST products. We are not committed to ensuring that clones/fakes products work properly with the firmware we provide.

We recommend to purchase genuine products from STMicroelectronics and purchase them from known and trusted distributors.

This thread will now be locked. However, if you face difficulties while using genuine ST products, we’re here to assist you. Please feel free to start a new thread, and our team, along with community members, will be ready to help you with any issues/questions you encounter.

Thank you for your understanding.

Regards
/Peter

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.