Instead of a years updates, which is a bit amorphous in terms of actual value delivered over the time frame, an alternate is you buy a major version, get all updates to that for free, for as long as it is updated in any way, including bug fixes.
Then pay for the next major version, only if you want to (with a discount for owners of the previous one).
And put the major version number into the name of the software, i.e. "Digibrain 1", "Digibrain 2", ...
Then continue to sell version X-1 at a discount, after X is released, to get more sales from the lower end of the market. And so owners of X-1 can still feel the love and less "out of date". Or even all previous versions at log drops in price. And bug fix old versions indefinitely, which is very purchaser friendly.
Another choice would be selling new updates for a noticeably higher price initially, signaling it as "premium", not "we want more of your money", then bringing the price down before the next update.
Might not connect with everyone, but it makes the value and optionality of purchasing an update more apparent.
Obviously, updates better be worth it.
Never trust any contract of the form "X is free unless we say it's not"
so charging for minor upgrades means that you end up with having to support users who didn't upgrade. that makes your support more expensive.
realistically i believe you don't want more than 2, maybe 3 versions of your product in active use, to keep your support load under control.
you could force people to buy minor upgrades by refusing to support the old version, but that would come across as exhortative.
An issue I ran into when I tried this with my software is that it’s not a very common model so people didn’t really get it. They’d call it a subscription, or they’d call it lifetime, and some got very angry when I mentioned anything about renewing for updates.
It’s a hard thing to describe succinctly, and it’s even harder to ensure that description survives the game of telephone as they tell their friends/followers.