2024-02-19 01:44 AM
For a project, I need to find a stm32 that has a minimum of 5 timers that can read encoders, and it has to have a CAN-bus peripheral.
Is there a way to do this in the part selectors? I can select the minimum number of 16bit timers, but not all 16bit counters seem to support encoder input. Any way to do this without manually reading all the datasheets?
I did try to automate this using the XML files in the data folder of stm32cube, but I did not really find a way to detect if a 16bit counter support encoder input.
2024-02-19 04:10 AM
@Vidicon wrote:Mostly yes,
but it does not mention encoder mode for the Advanced-control timers TIM1, TIM8.
AN4013 suggests that 'Advanced' Timers can do everything that 'General-Purpose' Timers can do, and it says that includes the Encoder mode.
But, indeed, the Datasheet says that only some 'General-Purpose' Timers (TIM2-5) have the Encoder mode:
and the description of 'Advanced' timers is unhelpful:
Another 'Documentation Clarification' request for @STOne-32 and @Imen.D
2024-02-19 04:26 AM - edited 2024-02-19 04:27 AM
I don't know where cube gets this information from,
In the timer xmls in IP subdirectory you'll find something like:
<Mode Name="Encoder_Interface" UserName="Encoder Mode" RemoveCondition="($IpNumber=6)|($IpNumber=7)|($IpNumber=18)|($IpNumber=9)|($IpNumber=10)|($IpNumber=11)|($IpNumber=12)|($IpNumber=13)|($IpNumber=14)|($IpNumber=15)|($IpNumber=16)|($IpNumber=17)">
note the RemoveCondition tag, i.e. this is list of timers (timers' numbers) which don't have encoder mode. Others do.
otherwise I could write a script to list all devices with 5 or more timers with the encoder mode.
If you do, please publish.
JW
2024-02-19 04:29 AM
RM0090 17.2 TIM1 and TIM8 main feature:
...
• Supports incremental (quadrature) encoder and hall-sensor circuitry for positioning
purposes
You should also have a look at AN4013
2024-02-19 04:53 AM
@Uwe Bonnes wrote:You should also have a look at AN4013
That's the one I've been citing - it seems not entirely helpful:
AN4013 suggests that 'Advanced' Timers can do everything that 'General-Purpose' Timers can do, and it says that includes the Encoder mode.
But, indeed, the Datasheet says that only some 'General-Purpose' Timers (TIM2-5) have the Encoder mode
https://community.st.com/t5/stm32-mcus-products/find-stm32-with-5-encoders-input-timers/m-p/641294/highlight/true#M235911
:frowning_face:
2024-02-19 04:54 AM
Ow this is useful to know, I don't have time to write a full script to parse this today, but definitely something i want to do that in the future.
2024-02-19 05:27 AM - edited 2024-02-19 05:27 AM
I did create this simple script:
import os
import xml.etree.ElementTree as ET
from pprint import pprint
def list_timers_in_mcu_files(directory):
instance_names = {}
for filename in os.listdir(directory):
if filename.endswith('.xml') and filename.startswith('STM32'):
tree = ET.parse(os.path.join(directory, filename))
root = tree.getroot()
instance_names.update({filename: []})
timers = []
for element in root:
instance_name = element.attrib.get('InstanceName')
if instance_name is not None and 'TIM' in instance_name:
timers.append(instance_name)
instance_names[filename] = timers
return instance_names
directory = 'mcu'
instance_names = list_timers_in_mcu_files(directory)
pprint(instance_names)
It lists the timers per MCU (file), Now I have to look for an MCU that has the Timers that I need.
There are some nice tables in AN4013.
2024-02-19 06:10 AM
Nice script! IRTIM should get excluded. As suspected, U5 devices offer a lot of possible usefull devices.
2024-02-19 06:18 AM
Some LPTIM in some STM32 have encoder mode, too, IIRC. I have no personal experience.
JW